package com.zp.self.module.level_1_问道.II_集合问题;

import com.google.common.collect.Lists;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

/**
 * @description : 查看ArrayList的源码
 * 1.初始容量: 10 ，扩容 old+(old>>1) ,扩容后copy采用native方法: System.arraycopy(original, 0, copy, 0,original.length);
 * 2.迭代器: 创建时记录版本号modCount,当其他线程 || 遍历过程编辑集合时报错：ConcurrentModificationException, fail-fast机制
 * 3.添加：add、addAll:扩容+System.arraycopy。    add(int index, E e)需要先对元素进行移动,有着线性的时间复杂度。
 * 4.削减数组：trimToSize 将此ArrayList实例的容量修剪为列表的当前大小。最小化ArrayList实例的存储
 */
public class II_1_ArrayList {

    @Test
    public void init(){

        //只读
//        List<String> list1 = List.of("ss","ss","ss","ss","ss","ss","ss");
        List<String> list2 = Arrays.asList("aa","bb");
        LinkedList<String> list3=new LinkedList<>();

        //可编辑 -- com.google.common.collect.Lists
        List<String> list4 = Lists.newArrayList("aa", "bb");
    }


    @Test
    public void test(){
        //内部存储
        ArrayList<String> list = new ArrayList<>(10);
        list.add("ss");
        list.trimToSize();

    }
}